/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package invsys.Controladores;


import invsys.Modelo.Venta;
import invsys.Utilidades.ManejadorBaseDatos;
import invsys.Utilidades.ValidarorVistas;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author luigie
 */
public class ControlVenta {
  public static Venta load(ResultSet rs) throws SQLException{
        Venta v=new Venta();
        v.setNumero(rs.getString(1));
        v.setFecha(rs.getString(2));
        v.setUsuario(ControlUsuario.BuscarUsuario(rs.getString(3)));
        v.setCliente(ControlCliente.BuscarClienteid(rs.getString(4)));
        v.setTotal(rs.getDouble(5));
        v.setIva(rs.getDouble(6));
        v.setDescuento(rs.getDouble(7));
        v.setEfectivo(rs.getDouble(8));
        v.setCambio(rs.getDouble(9));
        v.setTipoPago(rs.getString(10));
        v.setObservaciones(rs.getString(11));
        return v;
    }  
  static ValidarorVistas vistas=new ValidarorVistas();
  private static List ventas;
  public static Connection con;
  public static void RegistrarVenta(Venta v) throws SQLException, IOException, Exception {
        ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
        mbd.conectar();
        con = mbd.getConexion();
        if (con == null) {
            throw new SQLException(" no hay conexion ");
        }
        PreparedStatement pst = null;

        try {

            pst = con.prepareStatement("Insert Into ventas values(?,?,?,?,?,?,?,?,?,?,?)");
            pst.setString(1, v.getNumero());
            pst.setString(2, v.getFecha());
            pst.setString(3, v.getUsuario().getId());
            pst.setString(4, v.getCliente().getId());
            pst.setDouble(5, v.getTotal());
            pst.setDouble(6, v.getIva());
            pst.setDouble(7, v.getDescuento());
            pst.setDouble(8,v.getEfectivo());
            pst.setDouble(9,v.getCambio());
            pst.setString(10,v.getTipoPago());
            pst.setString(11, v.getObservaciones());
            pst.executeUpdate();
                  
           
        } finally {
            if (pst != null) {
                pst.close();
            }
        }
    }
  public static Venta BuscarVenta(String num) throws SQLException{
            if (num == null) {
          throw new SQLException("No hay elemento clave de la clase usuario");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Venta venta= null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from ventas where num= ?");
         pst.setString(1, num.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
             venta = load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return venta;
    }
    }
  public static Venta BuscarVentafecha(String fecha) throws SQLException{
            if (fecha == null) {
          throw new SQLException("No hay elemento clave de la clase usuarios");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Venta venta = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("select * from ventas where fecha= ?");
         pst.setString(1, fecha.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
            venta= load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return venta;
    }
    }
  public static Venta BuscarVentaCredito(String credito) throws SQLException{
            if (credito == null) {
          throw new SQLException("No hay elemento clave de la clase usuarios");
        }
         ResultSet rs = null;
         PreparedStatement pst = null;
         Venta venta = null;
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
         pst = con.prepareStatement("SELECT v.* FROM detallecredito dc,ventas v,creditos c WHERE c.id=? AND dc.factura=v.num AND c.id=dc.credito");
         pst.setString(1, credito.trim());

         rs = pst.executeQuery();
         while(rs.next()) {
            venta= load(rs);
         }
    } finally {
         if (rs != null) {
            rs.close();
         }
         if (pst != null) {
           pst.close();
         }
          return venta;
    }
    }
  public static void ModificarVenta(Venta v, String num) throws SQLException, Exception {
        if (BuscarVenta(num) == null) {
            throw new SQLException("usuario no registrado ");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("UPDATE ventas SET num = ? ,"
                    + " fecha = ?,total = ?, iva = ?, comprador = ? ,"
                    + " descuento=?,cliente=? WHERE num = ?,observacones=? ");	
            pst.setString(1, v.getNumero());
            pst.setString(2, v.getFecha());
            pst.setString(3, v.getUsuario().getId());
            pst.setString(4, v.getCliente().getId());
            pst.setDouble(5, v.getTotal());
            pst.setDouble(6, v.getIva());
            pst.setDouble(7,v.getDescuento());
            pst.setString(8, num);
            pst.setString(9,v.getObservaciones());
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
  public static void listarVenta() throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     ventas = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("select * from ventas ");
        rs = pst.executeQuery();
        while(rs.next()) {
           ventas.add(load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}
  public static boolean ExisteVenta(int ide){
        boolean existe=false;

        return existe;
    }
  public static void EliminarVenta(String ide) throws SQLException, Exception {
        if (BuscarVenta(ide) == null) {
            throw new SQLException("No hay elemento clave de la clase Usuario");
        }
        PreparedStatement pst = null;

        try {
            ManejadorBaseDatos mbd = ManejadorBaseDatos.getInstancia();
            mbd.conectar();
            con = mbd.getConexion();
            pst = con.prepareStatement("delete from ventas where num= ?");
            pst.setString(1, ide.trim());
            pst.executeUpdate();

        } finally {
            if (pst != null) {
                pst.close();
            }
        }

    }
  public static void listarVenta1(String sql) throws SQLException, Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     ventas = new LinkedList();
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement(sql);
        rs = pst.executeQuery();
        while(rs.next()) {
           ventas.add(load(rs));
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
}
}
  public static void setVenta(List aVentas) {
        ventas = aVentas;
    }
  public static List getVenta() {
        return ventas;
    }
  
  public static String ultimafactura() throws Exception {
     ResultSet rs = null;
     PreparedStatement pst = null;
     String ultimoc="";
     DecimalFormat sd=new DecimalFormat("000");
     try {
         ManejadorBaseDatos mbd=ManejadorBaseDatos.getInstancia();
         mbd.conectar();
         con=mbd.getConexion();
        pst = con.prepareStatement("SELECT COUNT(num)+1 AS ultimo FROM ventas  ");
        rs = pst.executeQuery();
        while(rs.next()) {           
           String ultimo=rs.getString("ultimo");
           int nro=Integer.parseInt(ultimo);
           ultimoc="F"+vistas.Fechacodigio()+sd.format(nro);
           
        }
    } finally {
        if (rs != null) {
           rs.close();
       }
        if (pst != null) {
          pst.close();
       }
    }
    return ultimoc;
}

}
